package cn.mengfly.algorithm.search;

/**
 * 这个接口主要做如下的事情：
 * <p>
 * 接受联通的分量对，并将他们设置为联通状态。
 * <p>
 * 然后设置完成之后，可以查找任意两个分量是否是联通状态，以及整个系统共有几个联通分量
 *
 * @author wangp
 */
public interface Uf {

    /**
     * 在P和q之间添加一条连接
     *
     * @param p p
     * @param q q
     */
    void union(int p, int q);


    /**
     * 查询 p 所在分量的标识符
     *
     * @param p p
     * @return 所在分量的标识符
     */
    int find(int p);

    /**
     * 判断两个分量是否是联通的
     *
     * @param p 分量P
     * @param q 分量Q
     * @return 两个分量是否是联通的
     */
    boolean connected(int p, int q);


    /**
     * 获取系统中的联通分量的个数
     *
     * @return 联通分量的个数
     */
    int count();

}
